{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据分析探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 43367 entries, 0 to 43366\n",
      "Data columns (total 2 columns):\n",
      " #   Column  Non-Null Count  Dtype \n",
      "---  ------  --------------  ----- \n",
      " 0   id      43367 non-null  int64 \n",
      " 1   Goods   43367 non-null  object\n",
      "dtypes: int64(1), object(1)\n",
      "memory usage: 677.7+ KB\n",
      "描述性统计结果：\n",
      "    Count  Min   Max\n",
      "0  43367    1  9835\n"
     ]
    }
   ],
   "source": [
    "# 查看数据特征\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "inputfile = '../data/GoodsOrder.csv'   # 输入的数据文件\n",
    "data = pd.read_csv(inputfile,encoding = 'gbk')  # 读取数据\n",
    "data .info()  # 查看数据属性\n",
    "\n",
    "data = data['id']\n",
    "description = [data.count(),data.min(), data.max()]  # 依次计算总数、最小值、最大值\n",
    "description = pd.DataFrame(description, index = ['Count','Min', 'Max']).T  # 将结果存入数据框\n",
    "print('描述性统计结果：\\n',np.round(description))  # 输出结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "销量排行前10商品的销量:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Goods</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>全脂牛奶</td>\n",
       "      <td>2513</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>其他蔬菜</td>\n",
       "      <td>1903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>155</th>\n",
       "      <td>面包卷</td>\n",
       "      <td>1809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>苏打</td>\n",
       "      <td>1715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150</th>\n",
       "      <td>酸奶</td>\n",
       "      <td>1372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>瓶装水</td>\n",
       "      <td>1087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>根茎类蔬菜</td>\n",
       "      <td>1072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>热带水果</td>\n",
       "      <td>1032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>购物袋</td>\n",
       "      <td>969</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>香肠</td>\n",
       "      <td>924</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Goods    id\n",
       "7     全脂牛奶  2513\n",
       "8     其他蔬菜  1903\n",
       "155    面包卷  1809\n",
       "134     苏打  1715\n",
       "150     酸奶  1372\n",
       "99     瓶装水  1087\n",
       "70   根茎类蔬菜  1072\n",
       "85    热带水果  1032\n",
       "143    购物袋   969\n",
       "160     香肠   924"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 分析热销商品\n",
    "\n",
    "# 销量排行前10商品的销量及其占比\n",
    "import pandas as pd\n",
    "inputfile = '../data/GoodsOrder.csv'  # 输入的数据文件\n",
    "data = pd.read_csv(inputfile,encoding = 'gbk')  # 读取数据\n",
    "group = data.groupby(['Goods']).count().reset_index()  # 对商品进行分类汇总\n",
    "sorted=group.sort_values('id',ascending=False)\n",
    "print('销量排行前10商品的销量:')  # 排序并查看前10位热销商品\n",
    "sorted[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "全脂牛奶 2513 0.05794728710770863\n",
      "其他蔬菜 1903 0.0438812922268084\n",
      "面包卷 1809 0.04171374547466968\n",
      "苏打 1715 0.039546198722530956\n",
      "酸奶 1372 0.031636958978024765\n",
      "瓶装水 1087 0.025065141697604168\n",
      "根茎类蔬菜 1072 0.024719256577582033\n",
      "热带水果 1032 0.023796896257523\n",
      "购物袋 969 0.022344178753430026\n",
      "香肠 924 0.021306523393363617\n"
     ]
    }
   ],
   "source": [
    "# 画条形图展示出销量排行前10商品的销量\n",
    "import matplotlib.pyplot as plt\n",
    "x=sorted[:10]['Goods']\n",
    "y=sorted[:10]['id']\n",
    "plt.figure(figsize = (8, 4))  # 设置画布大小 \n",
    "plt.barh(x,y)\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.xlabel('销量')  # 设置x轴标题\n",
    "plt.ylabel('商品类别')  # 设置y轴标题\n",
    "plt.title('商品的销量TOP10')  # 设置标题\n",
    "plt.savefig('../tmp/top10.png')  # 把图片以.png格式保存\n",
    "plt.show()  # 展示图片\n",
    "\n",
    "# 销量排行前10商品的销量占比\n",
    "data_nums = data.shape[0]\n",
    "for idnex, row in sorted[:10].iterrows():\n",
    "    print(row['Goods'],row['id'],row['id']/data_nums)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "各类别商品的销量及其占比:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Types</th>\n",
       "      <th>id</th>\n",
       "      <th>percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>7594</td>\n",
       "      <td>0.175110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>西点</td>\n",
       "      <td>7192</td>\n",
       "      <td>0.165840</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>果蔬</td>\n",
       "      <td>7146</td>\n",
       "      <td>0.164780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>米粮调料</td>\n",
       "      <td>5185</td>\n",
       "      <td>0.119561</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>百货</td>\n",
       "      <td>5141</td>\n",
       "      <td>0.118546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>肉类</td>\n",
       "      <td>4870</td>\n",
       "      <td>0.112297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>酒精饮料</td>\n",
       "      <td>2287</td>\n",
       "      <td>0.052736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>食品类</td>\n",
       "      <td>1870</td>\n",
       "      <td>0.043120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>零食</td>\n",
       "      <td>1459</td>\n",
       "      <td>0.033643</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>熟食</td>\n",
       "      <td>541</td>\n",
       "      <td>0.012475</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Types    id   percent\n",
       "0  非酒精饮料  7594  0.175110\n",
       "1     西点  7192  0.165840\n",
       "2     果蔬  7146  0.164780\n",
       "3   米粮调料  5185  0.119561\n",
       "4     百货  5141  0.118546\n",
       "5     肉类  4870  0.112297\n",
       "6   酒精饮料  2287  0.052736\n",
       "7    食品类  1870  0.043120\n",
       "8     零食  1459  0.033643\n",
       "9     熟食   541  0.012475"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 各类别商品的销量及其占比\n",
    "\n",
    "import pandas as pd\n",
    "inputfile1 = '../data/GoodsOrder.csv'\n",
    "inputfile2 = '../data/GoodsTypes.csv'\n",
    "data = pd.read_csv(inputfile1,encoding = 'gbk')\n",
    "types = pd.read_csv(inputfile2,encoding = 'gbk')  # 读入数据\n",
    "\n",
    "group = data.groupby(['Goods']).count().reset_index()\n",
    "sort = group.sort_values('id',ascending = False).reset_index()\n",
    "data_nums = data.shape[0]  # 总量\n",
    "del sort['index']\n",
    "\n",
    "sort_links = pd.merge(sort,types)  # 合并两个datafreame 根据type\n",
    "# 根据类别求和，每个商品类别的总量，并排序\n",
    "sort_link = sort_links.groupby(['Types']).sum().reset_index()\n",
    "sort_link = sort_link.sort_values('id',ascending = False).reset_index()\n",
    "del sort_link['index']  # 删除“index”列\n",
    "\n",
    "# 求百分比，然后更换列名，最后输出到文件\n",
    "sort_link['count'] = sort_link.apply(lambda line: line['id']/data_nums,axis=1)\n",
    "sort_link.rename(columns = {'count':'percent'},inplace = True)\n",
    "outfile1 = '../tmp/percent.csv'\n",
    "sort_link.to_csv(outfile1,index = False,header = True,encoding='gbk')  # 保存结果\n",
    "print('各类别商品的销量及其占比:')\n",
    "sort_link"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画饼图展示每类商品销量占比\n",
    "import matplotlib.pyplot as plt\n",
    "data = sort_link['percent']\n",
    "labels = sort_link['Types']\n",
    "plt.figure(figsize=(8, 6))  # 设置画布大小   \n",
    "plt.pie(data,labels=labels,autopct='%1.2f%%')\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.title('每类商品销量占比')  # 设置标题\n",
    "plt.savefig('../tmp/persent.png')  # 把图片以.png格式保存\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "非酒精饮料内部商品的销量及其占比:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Goods</th>\n",
       "      <th>count</th>\n",
       "      <th>Types</th>\n",
       "      <th>child_percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>全脂牛奶</td>\n",
       "      <td>2513</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.330919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>苏打</td>\n",
       "      <td>1715</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.225836</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>瓶装水</td>\n",
       "      <td>1087</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.143139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>水果/蔬菜汁</td>\n",
       "      <td>711</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.093627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>咖啡</td>\n",
       "      <td>571</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.075191</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>超高温杀菌的牛奶</td>\n",
       "      <td>329</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.043324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>其他饮料</td>\n",
       "      <td>279</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.036740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>一般饮料</td>\n",
       "      <td>256</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.033711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>速溶咖啡</td>\n",
       "      <td>73</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.009613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>茶</td>\n",
       "      <td>38</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.005004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>可可饮料</td>\n",
       "      <td>22</td>\n",
       "      <td>非酒精饮料</td>\n",
       "      <td>0.002897</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Goods  count  Types  child_percent\n",
       "0        全脂牛奶   2513  非酒精饮料       0.330919\n",
       "3          苏打   1715  非酒精饮料       0.225836\n",
       "5         瓶装水   1087  非酒精饮料       0.143139\n",
       "16     水果/蔬菜汁    711  非酒精饮料       0.093627\n",
       "22         咖啡    571  非酒精饮料       0.075191\n",
       "38   超高温杀菌的牛奶    329  非酒精饮料       0.043324\n",
       "45       其他饮料    279  非酒精饮料       0.036740\n",
       "51       一般饮料    256  非酒精饮料       0.033711\n",
       "101      速溶咖啡     73  非酒精饮料       0.009613\n",
       "125         茶     38  非酒精饮料       0.005004\n",
       "144      可可饮料     22  非酒精饮料       0.002897"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 非酒精饮料内部商品的销量及其占比\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")  # 用于排除警告\n",
    "# 先筛选“非酒精饮料”类型的商品，然后求百分比，然后输出结果到文件。\n",
    "selected = sort_links.loc[sort_links['Types'] == '非酒精饮料']  # 挑选商品类别为“非酒精饮料”并排序\n",
    "child_nums = selected['id'].sum()  # 对所有的“非酒精饮料”求和\n",
    "selected['child_percent'] = selected.apply(lambda line: line['id']/child_nums,axis = 1)  # 求百分比\n",
    "selected.rename(columns = {'id':'count'},inplace = True)\n",
    "outfile2 = '../tmp/child_percent.csv'\n",
    "sort_link.to_csv(outfile2,index = False,header = True,encoding='gbk')  # 输出结果\n",
    "print('非酒精饮料内部商品的销量及其占比:')\n",
    "selected"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画饼图展示非酒精饮品内部各商品的销量占比\n",
    "import matplotlib.pyplot as plt\n",
    "data = selected['child_percent']\n",
    "labels = selected['Goods']\n",
    "plt.figure(figsize = (8,6))  # 设置画布大小 \n",
    "explode = (0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.08,0.3,0.1,0.3)  # 设置每一块分割出的间隙大小\n",
    "plt.pie(data,explode = explode,labels = labels,autopct = '%1.2f%%', pctdistance = 1.1,labeldistance = 1.2)\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.title(\"非酒精饮料内部各商品的销量占比\")  # 设置标题\n",
    "plt.axis('equal')\n",
    "plt.savefig('../tmp/child_persent.png')  # 保存图形\n",
    "plt.show()  # 展示图形"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据转换结果的前5个元素：\n",
      " [['柑橘类水果', '人造黄油', '即食汤', '半成品面包'], ['咖啡', '热带水果', '酸奶'], ['全脂牛奶'], ['奶油乳酪', '肉泥', '仁果类水果', '酸奶'], ['炼乳', '长面包', '其他蔬菜', '全脂牛奶']]\n"
     ]
    }
   ],
   "source": [
    "# 数据转换\n",
    "\n",
    "import pandas as pd\n",
    "inputfile='../data/GoodsOrder.csv'\n",
    "data = pd.read_csv(inputfile,encoding = 'gbk')\n",
    "\n",
    "# 根据id对“Goods”列合并，并使用“，”将各商品隔开\n",
    "data['Goods'] = data['Goods'].apply(lambda x:','+x)\n",
    "data = data.groupby('id').sum().reset_index()\n",
    "\n",
    "# 对合并的商品列转换数据格式\n",
    "data['Goods'] = data['Goods'].apply(lambda x :[x[1:]])\n",
    "data_list = list(data['Goods'])\n",
    "\n",
    "# 分割商品名为每个元素\n",
    "data_translation = []\n",
    "for i in data_list:\n",
    "    p = i[0].split(',')\n",
    "    data_translation.append(p)\n",
    "print('数据转换结果的前5个元素：\\n', data_translation[0:5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型构建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建关联规则模型\n",
    "\n",
    "from numpy import *\n",
    " \n",
    "def loadDataSet():\n",
    "    return [['a', 'c', 'e'], ['b', 'd'], ['b', 'c'], ['a', 'b', 'c', 'd'], ['a', 'b'], ['b', 'c'], ['a', 'b'],\n",
    "            ['a', 'b', 'c', 'e'], ['a', 'b', 'c'], ['a', 'c', 'e']]\n",
    " \n",
    "def createC1(dataSet):\n",
    "    C1 = []\n",
    "    for transaction in dataSet:\n",
    "        for item in transaction:\n",
    "            if not [item] in C1:\n",
    "                C1.append([item])\n",
    "    C1.sort()\n",
    "    # 映射为frozenset唯一性的，可使用其构造字典\n",
    "    return list(map(frozenset, C1))     \n",
    "    \n",
    "# 从候选K项集到频繁K项集（支持度计算）\n",
    "def scanD(D, Ck, minSupport):\n",
    "    ssCnt = {}\n",
    "    for tid in D:   # 遍历数据集\n",
    "        for can in Ck:  # 遍历候选项\n",
    "            if can.issubset(tid):  # 判断候选项中是否含数据集的各项\n",
    "                if not can in ssCnt:\n",
    "                    ssCnt[can] = 1  # 不含设为1\n",
    "                else:\n",
    "                    ssCnt[can] += 1  # 有则计数加1\n",
    "    numItems = float(len(D))  # 数据集大小\n",
    "    retList = []  # L1初始化\n",
    "    supportData = {}  # 记录候选项中各个数据的支持度\n",
    "    for key in ssCnt:\n",
    "        support = ssCnt[key] / numItems  # 计算支持度\n",
    "        if support >= minSupport:\n",
    "            retList.insert(0, key)  # 满足条件加入L1中\n",
    "            supportData[key] = support  \n",
    "    return retList, supportData\n",
    " \n",
    "def calSupport(D, Ck, min_support):\n",
    "    dict_sup = {}\n",
    "    for i in D:\n",
    "        for j in Ck:\n",
    "            if j.issubset(i):\n",
    "                if not j in dict_sup:\n",
    "                    dict_sup[j] = 1\n",
    "                else:\n",
    "                    dict_sup[j] += 1\n",
    "    sumCount = float(len(D))\n",
    "    supportData = {}\n",
    "    relist = []\n",
    "    for i in dict_sup:\n",
    "        temp_sup = dict_sup[i] / sumCount\n",
    "        if temp_sup >= min_support:\n",
    "            relist.append(i)\n",
    "# 此处可设置返回全部的支持度数据（或者频繁项集的支持度数据）\n",
    "            supportData[i] = temp_sup\n",
    "    return relist, supportData\n",
    " \n",
    "# 改进剪枝算法\n",
    "def aprioriGen(Lk, k):\n",
    "    retList = []\n",
    "    lenLk = len(Lk)\n",
    "    for i in range(lenLk):\n",
    "        for j in range(i + 1, lenLk):  # 两两组合遍历\n",
    "            L1 = list(Lk[i])[:k - 2]\n",
    "            L2 = list(Lk[j])[:k - 2]\n",
    "            L1.sort()\n",
    "            L2.sort()\n",
    "            if L1 == L2:  # 前k-1项相等，则可相乘，这样可防止重复项出现\n",
    "                # 进行剪枝（a1为k项集中的一个元素，b为它的所有k-1项子集）\n",
    "                a = Lk[i] | Lk[j]  # a为frozenset()集合\n",
    "                a1 = list(a)\n",
    "                b = []\n",
    "                # 遍历取出每一个元素，转换为set，依次从a1中剔除该元素，并加入到b中\n",
    "                for q in range(len(a1)):\n",
    "                    t = [a1[q]]\n",
    "                    tt = frozenset(set(a1) - set(t))\n",
    "                    b.append(tt)\n",
    "                t = 0\n",
    "                for w in b:\n",
    "                    # 当b（即所有k-1项子集）都是Lk（频繁的）的子集，则保留，否则删除。\n",
    "                    if w in Lk:\n",
    "                        t += 1\n",
    "                if t == len(b):\n",
    "                    retList.append(b[0] | b[1])\n",
    "    return retList\n",
    "\n",
    "def apriori(dataSet, minSupport=0.2):\n",
    "# 前3条语句是对计算查找单个元素中的频繁项集\n",
    "    C1 = createC1(dataSet)\n",
    "    D = list(map(set, dataSet))  # 使用list()转换为列表\n",
    "    L1, supportData = calSupport(D, C1, minSupport)\n",
    "    L = [L1]  # 加列表框，使得1项集为一个单独元素\n",
    "    k = 2\n",
    "    while (len(L[k - 2]) > 0):  # 是否还有候选集\n",
    "        Ck = aprioriGen(L[k - 2], k)\n",
    "        Lk, supK = scanD(D, Ck, minSupport)  # scan DB to get Lk\n",
    "        supportData.update(supK)  # 把supk的键值对添加到supportData里\n",
    "        L.append(Lk)  # L最后一个值为空集\n",
    "        k += 1\n",
    "    del L[-1]  # 删除最后一个空集\n",
    "    return L, supportData  # L为频繁项集，为一个列表，1，2，3项集分别为一个元素\n",
    "\n",
    "# 生成集合的所有子集\n",
    "def getSubset(fromList, toList):\n",
    "    for i in range(len(fromList)):\n",
    "        t = [fromList[i]]\n",
    "        tt = frozenset(set(fromList) - set(t))\n",
    "        if not tt in toList:\n",
    "            toList.append(tt)\n",
    "            tt = list(tt)\n",
    "            if len(tt) > 1:\n",
    "                getSubset(tt, toList)\n",
    " \n",
    "def calcConf(freqSet, H, supportData, ruleList, minConf=0.7):\n",
    "    for conseq in H:  #遍历H中的所有项集并计算它们的可信度值\n",
    "        conf = supportData[freqSet] / supportData[freqSet - conseq]  # 可信度计算，结合支持度数据\n",
    "        # 提升度lift计算lift = p(a & b) / p(a)*p(b)\n",
    "        lift = supportData[freqSet] / (supportData[conseq] * supportData[freqSet - conseq])\n",
    " \n",
    "        if conf >= minConf and lift > 1:\n",
    "            print(freqSet-conseq,'-->',conseq,'支持度',round(supportData[freqSet],6),'置信度：',round(conf,6),'lift值为：',round(lift,6))\n",
    "            ruleList.append((freqSet - conseq, conseq, conf))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "frozenset({'水果/蔬菜汁'}) --> frozenset({'全脂牛奶'}) 支持度 0.02664 置信度： 0.368495 lift值为： 1.44216\n",
      "frozenset({'人造黄油'}) --> frozenset({'全脂牛奶'}) 支持度 0.024199 置信度： 0.413194 lift值为： 1.617098\n",
      "frozenset({'仁果类水果'}) --> frozenset({'全脂牛奶'}) 支持度 0.030097 置信度： 0.397849 lift值为： 1.557043\n",
      "frozenset({'牛肉'}) --> frozenset({'全脂牛奶'}) 支持度 0.021251 置信度： 0.405039 lift值为： 1.58518\n",
      "frozenset({'冷冻蔬菜'}) --> frozenset({'全脂牛奶'}) 支持度 0.020437 置信度： 0.424947 lift值为： 1.663094\n",
      "frozenset({'本地蛋类'}) --> frozenset({'其他蔬菜'}) 支持度 0.022267 置信度： 0.350962 lift值为： 1.813824\n",
      "frozenset({'黄油'}) --> frozenset({'其他蔬菜'}) 支持度 0.020031 置信度： 0.361468 lift值为： 1.868122\n",
      "frozenset({'本地蛋类'}) --> frozenset({'全脂牛奶'}) 支持度 0.029995 置信度： 0.472756 lift值为： 1.850203\n",
      "frozenset({'黑面包'}) --> frozenset({'全脂牛奶'}) 支持度 0.025216 置信度： 0.388715 lift值为： 1.521293\n",
      "frozenset({'糕点'}) --> frozenset({'全脂牛奶'}) 支持度 0.033249 置信度： 0.373714 lift值为： 1.462587\n",
      "frozenset({'酸奶油'}) --> frozenset({'其他蔬菜'}) 支持度 0.028876 置信度： 0.402837 lift值为： 2.081924\n",
      "frozenset({'猪肉'}) --> frozenset({'其他蔬菜'}) 支持度 0.021657 置信度： 0.375661 lift值为： 1.941476\n",
      "frozenset({'酸奶油'}) --> frozenset({'全脂牛奶'}) 支持度 0.032232 置信度： 0.449645 lift值为： 1.759754\n",
      "frozenset({'猪肉'}) --> frozenset({'全脂牛奶'}) 支持度 0.022166 置信度： 0.38448 lift值为： 1.504719\n",
      "frozenset({'根茎类蔬菜'}) --> frozenset({'全脂牛奶'}) 支持度 0.048907 置信度： 0.448694 lift值为： 1.756031\n",
      "frozenset({'根茎类蔬菜'}) --> frozenset({'其他蔬菜'}) 支持度 0.047382 置信度： 0.434701 lift值为： 2.246605\n",
      "frozenset({'凝乳'}) --> frozenset({'全脂牛奶'}) 支持度 0.026131 置信度： 0.490458 lift值为： 1.919481\n",
      "frozenset({'热带水果'}) --> frozenset({'全脂牛奶'}) 支持度 0.042298 置信度： 0.403101 lift值为： 1.577595\n",
      "frozenset({'柑橘类水果'}) --> frozenset({'全脂牛奶'}) 支持度 0.030503 置信度： 0.36855 lift值为： 1.442377\n",
      "frozenset({'黄油'}) --> frozenset({'全脂牛奶'}) 支持度 0.027555 置信度： 0.497248 lift值为： 1.946053\n",
      "frozenset({'酸奶'}) --> frozenset({'全脂牛奶'}) 支持度 0.056024 置信度： 0.401603 lift值为： 1.571735\n",
      "frozenset({'其他蔬菜'}) --> frozenset({'全脂牛奶'}) 支持度 0.074835 置信度： 0.386758 lift值为： 1.513634\n",
      "frozenset({'全脂牛奶', '酸奶'}) --> frozenset({'其他蔬菜'}) 支持度 0.022267 置信度： 0.397459 lift值为： 2.054131\n",
      "frozenset({'其他蔬菜', '酸奶'}) --> frozenset({'全脂牛奶'}) 支持度 0.022267 置信度： 0.512881 lift值为： 2.007235\n",
      "frozenset({'全脂牛奶', '根茎类蔬菜'}) --> frozenset({'其他蔬菜'}) 支持度 0.023183 置信度： 0.474012 lift值为： 2.44977\n",
      "frozenset({'其他蔬菜', '根茎类蔬菜'}) --> frozenset({'全脂牛奶'}) 支持度 0.023183 置信度： 0.48927 lift值为： 1.914833\n"
     ]
    }
   ],
   "source": [
    "# 生成规则\n",
    "def gen_rule(L, supportData, minConf = 0.7):\n",
    "    bigRuleList = []\n",
    "    for i in range(1, len(L)):  # 从二项集开始计算\n",
    "        for freqSet in L[i]:  # freqSet为所有的k项集\n",
    "            # 求该三项集的所有非空子集，1项集，2项集，直到k-1项集，用H1表示，为list类型,里面为frozenset类型，\n",
    "            H1 = list(freqSet)\n",
    "            all_subset = []\n",
    "            getSubset(H1, all_subset)  # 生成所有的子集\n",
    "            calcConf(freqSet, all_subset, supportData, bigRuleList, minConf)\n",
    "    return bigRuleList\n",
    " \n",
    "if __name__ == '__main__':\n",
    "    dataSet = data_translation\n",
    "    L, supportData = apriori(dataSet, minSupport = 0.02)\n",
    "    rule = gen_rule(L, supportData, minConf = 0.35)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
